#ifndef JASS_VALUE_VISITOR_H
#define JASS_VALUE_VISITOR_H

#include <any>

class IntegerJassValue;
class RealJassValue;
class BooleanJassValue;
class StringJassValue;
class CodeJassValue;
class ArrayJassValue;
class HandleJassValue;
class DummyJassValue;

class JassValueVisitor {
public:
    virtual std::any accept(IntegerJassValue* value) = 0;

    virtual std::any accept(RealJassValue* value) = 0;

    virtual std::any accept(BooleanJassValue* value) = 0;

    virtual std::any accept(StringJassValue* value) = 0;

    virtual std::any accept(CodeJassValue* value) = 0;

    virtual std::any accept(ArrayJassValue* value) = 0;

    virtual std::any accept(HandleJassValue* value) = 0;

    virtual std::any accept(DummyJassValue* value) = 0;
};

#endif // JASS_VALUE_VISITOR_H
